package com.edu.exam.enums.common;

import com.edu.exam.enums.core.BaseEnum;

import java.util.Arrays;

/**
 * 事件类型枚举
 *
 * 统一的事件类型管理，用于各种需要事件记录和处理的场景
 * 替代分散在各个实体中的重复事件类型定义
 *
 * @author System
 * @version 1.0.0
 * @since 2025-11-13
 */
public enum EventType implements BaseEnum {

    /**
     * 创建事件
     */
    CREATE("CREATE", "创建事件"),

    /**
     * 更新事件
     */
    UPDATE("UPDATE", "更新事件"),

    /**
     * 删除事件
     */
    DELETE("DELETE", "删除事件"),

    /**
     * 查看事件
     */
    VIEW("VIEW", "查看事件"),

    /**
     * 访问事件
     */
    ACCESS("ACCESS", "访问事件"),

    /**
     * 登录事件
     */
    LOGIN("LOGIN", "登录事件"),

    /**
     * 登出事件
     */
    LOGOUT("LOGOUT", "登出事件"),

    /**
     * 提交事件
     */
    SUBMIT("SUBMIT", "提交事件"),

    /**
     * 审批事件
     */
    APPROVE("APPROVE", "审批事件"),

    /**
     * 拒绝事件
     */
    REJECT("REJECT", "拒绝事件"),

    /**
     * 导入事件
     */
    IMPORT("IMPORT", "导入事件"),

    /**
     * 导出事件
     */
    EXPORT("EXPORT", "导出事件"),

    /**
     * 同步事件
     */
    SYNC("SYNC", "同步事件"),

    /**
     * 备份事件
     */
    BACKUP("BACKUP", "备份事件"),

    /**
     * 恢复事件
     */
    RESTORE("RESTORE", "恢复事件"),

    /**
     * 启动事件
     */
    START("START", "启动事件"),

    /**
     * 停止事件
     */
    STOP("STOP", "停止事件"),

    /**
     * 暂停事件
     */
    PAUSE("PAUSE", "暂停事件"),

    /**
     * 恢复事件
     */
    RESUME("RESUME", "恢复事件"),

    /**
     * 错误事件
     */
    ERROR("ERROR", "错误事件"),

    /**
     * 警告事件
     */
    WARNING("WARNING", "警告事件"),

    /**
     * 信息事件
     */
    INFO("INFO", "信息事件"),

    /**
     * 调试事件
     */
    DEBUG("DEBUG", "调试事件"),

    /**
     * 系统事件
     */
    SYSTEM("SYSTEM", "系统事件"),

    /**
     * 用户事件
     */
    USER("USER", "用户事件"),

    /**
     * 安全事件
     */
    SECURITY("SECURITY", "安全事件");

    private final String code;
    private final String description;

    EventType(String code, String description) {
        this.code = code;
        this.description = description;
    }

    @Override
    public String getCode() {
        return code;
    }

    @Override
    public String getDescription() {
        return description;
    }

    public static EventType fromCode(String code) {
        return Arrays.stream(values())
                .filter(e -> e.getCode().equals(code))
                .findFirst()
                .orElseThrow(() -> new IllegalArgumentException("Unknown event type code: " + code));
    }
    @Override
    public String toString() {
        return description;
    }
}